package com.sz.app.edi.base.service;

import com.sz.app.edi.base.dto.AccessToken;
import com.sz.app.edi.base.entity.SynCompanyAccount;

import java.util.List;

/**
 * Function: SynCompanyService <br>
 * Date: 2017年07月04日 16:34 <br>
 * Author: wentao.chang
 */
public interface SynCompanyAccountService {
    /**
     * 注册供应商客户系统的账户
     *
     * @param type         1供应商  2客户
     * @param bizId        供应商或者客户的ID
     * @param bizAccountId 供应商或者客户的账户ID
     */
    SynCompanyAccount registryEdiAccount(int type, int bizId, int bizAccountId);

    /**
     * 注销供应商客户系统的账户
     *
     * @param type         1供应商  2客户
     * @param bizId        供应商或者客户的ID
     * @param bizAccountId
     */
    void deleteEdiAccount(int type, int bizId, int bizAccountId);

    /**
     * 验证apiKey securityKey 是否匹配
     *
     * @param apiKey      apiKey
     * @param securityKey securityKey
     */
    SynCompanyAccount validAccount(String apiKey, String securityKey);

    /**
     * 验证token
     *
     * @param token token
     */
    SynCompanyAccount validToken(String token);

    /**
     * 更新token以及token的有效期
     *
     * @param apiKey      apiKey
     * @param securityKey securityKey
     */
    AccessToken generateToken(String apiKey, String securityKey);

    /**
     * 更新其他信息，包含推消息的信息
     */
    void updateDetailInfo(int id);

    /**
     * @param type         1、供应商 2、客户
     * @param bizId        业务id
     * @param bizAccountId 业务账号id
     * @return
     */
    SynCompanyAccount findByBizAccountIdAndType(Integer type, Integer bizId, Integer bizAccountId);

    List<SynCompanyAccount> findByBizIdListAndType(List<Integer> bizIdList, Integer type);

    SynCompanyAccount findByToken(String token);

    SynCompanyAccount findByClientId(String clientId);

    void reRegistryEdiAccount(SynCompanyAccount sca);
}
